// Copyright (c) 2014 Dan Nagle. All rights reserved.
//
// Licensed MIT: https://github.com/dannagle/PacketSender-Android
package com.packetsender.android;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
public class NewPacketActivity extends Activity {
public DataStorage dataStore;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_packet);
setTitle("Setup Packet");
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
dataStore = new DataStorage(
getSharedPreferences(DataStorage.PREFS_SETTINGS_NAME, 0),
getSharedPreferences(DataStorage.PREFS_SAVEDPACKETS_NAME, 0),
getSharedPreferences(DataStorage.PREFS_SERVICELOG_NAME, 0),
getSharedPreferences(DataStorage.PREFS_MAINTRAFFICLOG_NAME, 0)
);
mContext = getApplicationContext();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
//getMenuInflater().inflate(R.menu.new_packet, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
private EditText nameEditText;
private EditText asciiEditText;
private EditText hexEditText;
private EditText ipEditText;
private EditText portEditText;
private Spinner methodSpinner;
private Button testButton;
private Button saveButton;
private boolean suppressListener;
public Packet getPacket() {
Packet returnPacket = new Packet();
returnPacket.name = nameEditText.getText().toString();
returnPacket.data = returnPacket.toBytes(hexEditText.getText().toString());
returnPacket.toIP = ipEditText.getText().toString();
returnPacket.port = Integer.parseInt(portEditText.getText().toString());
returnPacket.tcpOrUdp = methodSpinner.getSelectedItem().toString();
return returnPacket;
}
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_new_packet, container, false);
suppressListener = false;
nameEditText = (EditText) rootView.findViewById(R.id.nameEditText);
asciiEditText = (EditText) rootView.findViewById(R.id.asciiEditText);
hexEditText = (EditText) rootView.findViewById(R.id.hexEditText);
ipEditText = (EditText) rootView.findViewById(R.id.ipEditText);
portEditText = (EditText) rootView.findViewById(R.id.portEditText);
methodSpinner = (Spinner) rootView.findViewById(R.id.methodSpinner);
testButton = (Button) rootView.findViewById(R.id.testButton);
saveButton = (Button) rootView.findViewById(R.id.saveButton);
NewPacketActivity NPA = (NewPacketActivity)getActivity();
Intent passedIntent = NPA.getIntent();
Packet receivedPacket = new Packet();
receivedPacket.UnitTest_conversions();
if(passedIntent.hasExtra(DataStorage.INTENT_OUT + "/name")) {
receivedPacket = DataStorage.getPacketFromIntent(NPA.getIntent());
}
if(!receivedPacket.name.isEmpty()) {
nameEditText.setText(receivedPacket.name);
asciiEditText.setText(receivedPacket.toAscii());
hexEditText.setText(receivedPacket.toHex());
ipEditText.setText(receivedPacket.toIP);
portEditText.setText(receivedPacket.port + "");
if(receivedPacket.tcpOrUdp.equalsIgnoreCase("udp")) {
methodSpinner.setSelection(1);
}
}
asciiEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(suppressListener) return;
// TODO Auto-generated method stub
suppressListener = true;
String tohex = asciiEditText.getText().toString();
Log.d("newpacket", DataStorage.FILE_LINE(tohex));
byte [] bytes = Packet.asciiToBytes(tohex);
hexEditText.setText(Packet.toHex(bytes));
suppressListener = false;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
hexEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(suppressListener) return;
// TODO Auto-generated method stub
suppressListener = true;
String toascii = hexEditText.getText().toString();
Log.d("newpacket", DataStorage.FILE_LINE(toascii));
byte [] bytes = Packet.toBytes(toascii);
asciiEditText.setText(Packet.toAscii(bytes));
suppressListener = false;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
testButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v)
{
//perform action
Packet testPacket = getPacket();
Log.d("newpacket", DataStorage.FILE_LINE(testPacket + ""));
NewPacketActivity NPA = (NewPacketActivity)getActivity();
NPA.dataStore.sendPacketToService(testPacket);
}
});
saveButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v)
{
//perform action
Packet savePacket = getPacket();
if(savePacket.name.trim().isEmpty()) {
Toast.makeText((NewPacketActivity)getActivity(), "Name cannot be blank.", Toast.LENGTH_LONG).show();
return;
}
if(savePacket.toIP.trim().isEmpty()) {
Toast.makeText((NewPacketActivity)getActivity(), "IP/DNS cannot be blank.", Toast.LENGTH_LONG).show();
return;
}
Log.d("newpacket", DataStorage.FILE_LINE(savePacket + ""));
NewPacketActivity NPA = (NewPacketActivity)getActivity();
NPA.dataStore.savePacket(savePacket);
NPA.dataStore.invalidateLists();
NPA.finish();
}
});
return rootView;
}
}
}